# -*- coding: utf-8 -*-
"""
选币策略框架 | 邢不行 | 2024分享会
author: 邢不行
微信: xbx6660

# 配置区域说明
1. 【核心】账户及策略相关配置，设置账户名称，策略名称等
2. 【网络】交易所相关配置，设置交易所代理等
3. 【全局】运行模式相关配置，设置并行数量，稳定币种，特殊币种，debug模式等
4. 【其他】文件系统相关配置，自动化创建文件夹
"""
# ====================================================================================================
# ** 账户及策略配置 **
# 【核心设置区域】设置账户API，策略详细信息，交易的一些特定参数等等
# * 注意，以下功能都是在config.py中实现
# ====================================================================================================

# ------ 框架重要功能 ------
# 支持“纯合约模式”：多头和空头都是合约。
# 支持“现货+合约模式”：多头可以包含现货、合约，空头包含合约。
# 纯多功能：全部仓位只买入策略的多头。不交易空头。
# 统一账户功能：可以在 `传统的非统一账户` 和 `统一账户`模式 之间选择。任何模式下，原有功能都保留
# 分钟偏移功能：支持任意时间开始的小时级别K线
# 多账户功能：一个程序可以同时在多个账户下运行策略。
# 多offset功能

# ------ 策略级别功能 ------
# 多策略融合功能（大杂烩）：一个账户下可以同时运行多个选币策略。例如可以在一个账户下，使用一份资金，运行策略A（参数1）、策略A（参数2）、策略A（参数3）、策略B（参数1）、策略B（参数2）。以此类推。
# 多策略资金配比功能：一个账户运行多个策略时，每个策略可以配置不同的资金比例。
# 多空分离选币：多头和空头可以使用不一样的策略。
# 多空分离过滤（前置）：多头和空头的前置过滤条件可以不同。
# 数据整理支持自定义数据：支持在策略中加入量价数据之外的任意第三方数据

# ------ 其他功能 ------
# 自动rebalance功能。默认开启，可以关闭后手动rebalance
# rebalance时，可以设定最小下单量。例如设置为50u，可以显著降低无效换手。
# 下单时动态拆单功能
# BNB抵扣手续费功能。开启BNB燃烧，抵扣手续费
# 小额资产自动兑换BNB功能。
# 企业微信机器人通知功能。开启企业微信机器人
# 交易黑名单与白名单功能。开启选币黑名单与白名单
# ====================================================================================================

# ++++ 多账户多策略 ++++
# 多账户功能：一个程序可以同时在多个账户下运行策略。同时兼容不同的账户类型。
account_config = {
    "统一账户_基础配置": {
        # 交易所API配置
        'apiKey': '',
        'secret': '',

        # ++++ 策略配置 ++++
        # 多策略融合功能（大杂烩）：一个账户下可以同时运行多个选币策略。例如可以在一个账户下，使用一份资金，运行策略A（参数1）、策略A（参数2）、策略A（参数3）、策略B（参数1）、策略B（参数2）。以此类推。
        # 多策略资金配比功能：一个账户运行多个策略时，每个策略可以配置不同的资金比例。
        # 多空分离选币：多头和空头可以使用不一样的策略。
        # 多空分离过滤（前置）：多头和空头的前置过滤条件可以不同。
        # 数据整理支持自定义数据：支持在策略中加入量价数据之外的任意第三方数据
        "strategy_list": [
            # ===========================================================
            # !!! 实盘前先回测一下，不要无脑跑案例策略，没人能保证案例策略能赚钱 !!!
            # 以下配置非官方提供的案例策略，这里只是举例如何配置，具体配置请自行处理
            # ===========================================================
            {
                # 策略名称。与strategy目录中的策略文件名保持一致。
                "strategy": "Strategy_Spot_80",
                # ++++ 多offset功能 ++++
                # 可以使用1个或者多个offset。可以看 https://bbs.quantclass.cn/thread/36188 了解什么是offset？
                "offset_list": [0],
                # 资金权重。程序会自动根据这个权重计算你的策略占比，具体可以看1.8的直播讲解
                "cap_weight": 1,
                "is_use_spot": False,  # 是否使用现货，如果为False，则使用合约
                "long_cap_weight": 1,  # 多头资金占比
                "short_cap_weight": 1,  # 空头资金占比
                "factor_list": [
                    ('QuoteVolumeMean', True, 80, 1)  # 因子名（和factors文件中相同），排序方式，参数，权重。
                ],
                "filter_list": [
                    ('PctChange', 80)
                ],
                "long_filter_list_post": [
                    ('PctChange', 168, 'pct:<0.8', True)
                ],
                "use_custom_func": False  # 使用系统内置因子计算、过滤函数
            },
        ],

        # ++++ BNB抵扣手续费功能 ++++
        "if_use_bnb_burn": True,  # 是否开启BNB燃烧，抵扣手续费
        "buy_bnb_value": 11,  # 买多少U的bnb来抵扣手续费。建议最低11U，现货最小下单量限制10U

        # ++++ 统一账户功能 ++++
        # 可以在 `传统的非统一账户` 和 `统一账户`模式 之间选择。任何模式下，原有功能都保留
        # 支持账户类型：统一账户，普通账户
        'account_type': '统一账户',
        # 套利底仓设置。例：['ETHUSDT'].
        # - 底仓默认为空，当底仓为空的时候，可以开启现货+合约模式
        # - 当底仓不为空的时候，程序默认自动启动纯合约模式
        # - 如果真的需要，可以diy注释相关逻辑代码
        'seed_coins': ['BTCUSDT'],
        # 指定币种当保证金。例：{'ETHUSDT': 1000}
        # - 普通账户需要将保证金币种，手动划转到合约账户才会生效，如果在现货账户，程序会帮你卖掉
        # - 统一账户将保证金币种放在杠杆钱包即可，不需要划转
        # - 如果账户指定币种数量不足，不会计算保证金
        # - 保证金对应usdt，自己可以diy修改
        'coin_margin': {
            'ETHUSDT': 1000,  # 指定账户中的所有ETH的保证金金额为 1000
        },

        # ++++ 分钟偏移功能 ++++
        # 支持任意时间开始的小时级别K线
        "hour_offset": '0m',  # 分钟偏移设置，可以自由设置时间，配置必须是kline脚本中interval的倍数。默认：0m，表示不偏移。15m，表示每个小时偏移15m下单。

        # ++++ 企业微信机器人功能 ++++
        "wechat_webhook_url": 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=',
        # 创建企业微信机器人 参考帖子: https://bbs.quantclass.cn/thread/10975
        # 配置案例  https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxx
    },
    "统一账户_高级配置": {
        # 交易所API配置
        'apiKey': '',
        'secret': '',

        # ++++ 策略配置 ++++
        # 多策略融合功能（大杂烩）：一个账户下可以同时运行多个选币策略。例如可以在一个账户下，使用一份资金，运行策略A（参数1）、策略A（参数2）、策略A（参数3）、策略B（参数1）、策略B（参数2）。以此类推。
        # 多策略资金配比功能：一个账户运行多个策略时，每个策略可以配置不同的资金比例。
        # 多空分离选币：多头和空头可以使用不一样的策略。
        # 多空分离过滤（前置）：多头和空头的前置过滤条件可以不同。
        # 数据整理支持自定义数据：支持在策略中加入量价数据之外的任意第三方数据
        "strategy_list": [
            # ===========================================================
            # !!! 实盘前先回测一下，不要无脑跑案例策略，没人能保证案例策略能赚钱 !!!
            # 以下配置非官方提供的案例策略，这里只是举例如何配置，具体配置请自行处理
            # ===========================================================
            {
                # 策略名称。与strategy目录中的策略文件名保持一致。
                "strategy": "Strategy_Spot_80",
                # ++++ 多offset功能 ++++
                # 可以使用1个或者多个offset。可以看 https://bbs.quantclass.cn/thread/36188 了解什么是offset？
                "offset_list": [0],
                # 资金权重。程序会自动根据这个权重计算你的策略占比，具体可以看1.8的直播讲解
                "cap_weight": 1,
                "is_use_spot": True,  # 是否使用现货，如果为False，则使用合约
                "long_cap_weight": 1,  # 多头资金占比
                "short_cap_weight": 1,  # 空头资金占比
                "factor_list": [
                    ('QuoteVolumeMean', True, 80, 1)  # 因子名（和factors文件中相同），排序方式，参数，权重。
                ],
                "filter_list": [
                    ('PctChange', 80)
                ],
                "long_filter_list_post": [
                    ('PctChange', 168, 'pct:<0.8', True)
                ],
                "short_filter_list_post": [
                    ('PctChange', 168, 'pct:<0.8', True)
                ],
                "use_custom_func": False  # 使用系统内置因子计算、过滤函数
            },
        ],

        # ++++ 纯多功能 ++++
        # - 全部仓位只买入策略的多头。不交易空头。
        # - 仅支持纯现货模式的纯多功能。
        # - 统一账户模式下配置纯现货纯多模式，如果配置seed_coins和coin_margin，会出现资金不足的报错，建议用新号配置这个模式
        # - 普通账户模式下：资金不会划转到合约账户，多头中的现货存在合约时也不会去开仓合约
        # - 统一账户模式下：多头中的现货存在合约时也不会去开仓合约
        "is_pure_long": False,  # 纯多设置(https://bbs.quantclass.cn/thread/36230)

        # ++++ 统一账户功能 ++++
        # 可以在 `传统的非统一账户` 和 `统一账户`模式 之间选择。任何模式下，原有功能都保留
        # 支持账户类型：统一账户，普通账户
        'account_type': '统一账户',
        # 套利底仓设置。例：['ETHUSDT'].
        # - 底仓默认为空，当底仓为空的时候，可以开启现货+合约模式
        # - 当底仓不为空的时候，程序默认自动启动纯合约模式
        # - 如果真的需要，可以diy注释相关逻辑代码
        'seed_coins': ['BTCUSDT'],
        # 指定币种当保证金。例：{'ETHUSDT': 1000}
        # - 普通账户需要将保证金币种，手动划转到合约账户才会生效，如果在现货账户，程序会帮你卖掉
        # - 统一账户将保证金币种放在杠杆钱包即可，不需要划转
        # - 如果账户指定币种数量不足，不会计算保证金
        # - 保证金对应usdt，自己可以diy修改
        'coin_margin': {
            'ETHUSDT': 1000,
        },

        # ++++ 分钟偏移功能 ++++
        # 支持任意时间开始的小时级别K线
        "hour_offset": '0m',  # 分钟偏移设置，可以自由设置时间，配置必须是kline脚本中interval的倍数。默认：0m，表示不偏移。15m，表示每个小时偏移15m下单。

        # ++++ 自动rebalance功能 ++++
        "if_rebalance": True,  # 是否开启rebalance模式，默认True，表示开启，False表示不开启。
        # 可以设定下单时的最小下单量。例如设置为50u，可以显著降低无效换手。

        # 现货下单最小金额限制，适当增加可以减少部分reb。
        # 默认10，不建议小于10，这会让你的下单报错，10是交易所的限制。
        'order_spot_money_limit': 10,

        # 合约下单最小金额限制，适当增加可以减少部分reb。
        # 默认5，不建议小于5，这会让你的下单报错，5是交易所的限制。
        'order_swap_money_limit': 5,

        # ++++ 下单时动态拆单功能 ++++
        "max_one_order_amount": 100,  # 最大拆单金额。
        "twap_interval": 2,  # 下单间隔

        # ++++ BNB抵扣手续费功能 ++++
        "if_use_bnb_burn": True,  # 是否开启BNB燃烧，抵扣手续费
        "buy_bnb_value": 11,  # 买多少U的bnb来抵扣手续费。建议最低11U，现货最小下单量限制10U

        # ++++ 小额资产自动兑换BNB功能 ++++
        # 当且仅当 `if_use_bnb_burn` 为 True 时生效
        "if_transfer_bnb": False,  # 是否开启小额资产兑换BNB功能。仅现货模式下生效

        # ++++ 企业微信机器人功能 ++++
        "wechat_webhook_url": 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=',
        # 创建企业微信机器人 参考帖子: https://bbs.quantclass.cn/thread/10975
        # 配置案例  https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxx

        # ++++ 交易黑名单与白名单功能 ++++
        "black_list": ['BTCUSDT', 'ETHUSDT', 'BTSUSDT'],  # 黑名单。不参与策略的选币，如果持有黑名单币种，将会自动清仓
        "white_list": [],  # 白名单。只参与策略的选币

        # ++++ 其他账户设置 ++++
        "leverage": 1,  # 实际下单杠杆。现货模式不要超过1，合约模式不要超过2。对于杠杆的一些解释： https://bbs.quantclass.cn/thread/25188
        "get_kline_num": 999,  # 获取多少根K线。这里跟策略日频和小时频影响。日线策略，代表999根日线k。小时策略，代表999根小时k
        "min_kline_size": 168,  # 最低要求b中有多少小时的k线。这里与回测一致。168：表示168小时

        # 大数据拆分份数
        # 对于大参数的策略而言，一次性读取太多数据会导致内存溢出
        # 现在可以根据你的内存限制，设置拆分份数
        # 拆分份数越大，数据读取会越慢，但是内存占用会减小（轻量服务器）
        # 拆分份数越小，数据读取会越快，但是内存占用会增大（高配服务器）
        "chunk_num": 1,  # 默认：1。表示不对数据进行拆分
    },
}
